/**
 * @description contollers/api
 *
 * @author xiaomi
 */

/**
 * @apiVersion 1.0.0
 * @apiGroup Base
 * @apiDescription
 *
 * ## 签名算法
 *
 * 1. 设临时字符串为空， `let tmpStr = '';`
 * 2. 拼接 APPID， `tmpStr += APP_ID;`
 * 3. 拼接 HTTP Method (大写)， `tmpStr += '@' + 'GET';`
 * 4. 拼接 Request URI (不包含 host 和 protocol)，`tmpStr += '@' + '/templets';`
 * 5. 拼接 Query String，参数名按 ASCII 码从小到大排序（字典序，不需要 urlEncode）， `tmpStr += '@' + sortByASCII(query);`
 * 6. 拼接时间戳，`tmpStr += '@' + '1480486666';`
 * 7. 拼接 Request Body，如果内容为空忽略此步骤，对 body 做 JSON 序列化， `tmpStr += '@' + JSON.stringify(body);`
 * 8. 用 `tmpStr` 和 `AppSecret` 做 Hmac sha1 计算得到签名值（hex 全小写格式导出）， `let signature = sha1(tmpStr, APP_SECRET);`
 *
 * ### 注意事项
 *
 * 1. 所有数据均使用 `utf-8` 编码
 * 2. APPID，时间戳， 签名值分别使用 'X-Appid', 'X-Timestamp', 'X-Signature' 请求头发送
 * 3. Query String 区分大小写，且所以键值均不要做 URL Encode
 * 4. 各个数据块之间用 `@` 隔开
 * 5. 时间戳精确到秒（10位），签名有效期为时间戳正负 5 分钟内
 * 6. 如果 Re略quest Body 为空，忽整个 body 的拼接
 * 7. JSON 序列化 Request Body 时，不要强转义字符，不要转为 unicode，例如 PHP: `$body_str = json_encode($body, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);`
 * 8. 请求 API 时尽可能使用 `Content-type: application/json` 避免签名校验失败
 * 9. 如果遇到上传文件等二进制资源请求时，使用 `Content-Type: multipart/form-data`，同时二进制字段不参与签名计算
 *
 * ### 密钥
 *
 * [见 Tower](https://tower.im/projects/cebd610863e7444ba38e855ad4e8147d/docs/5e15dda1befd4e39824144c87ed58da6/)
 *
 * @api {*} / 基础约定
 * @apiSampleRequest off
 */

var ctrls = [
    require('./v1/users'),
    require('./v1/roles'),
    require('./v1/attributes'),
    require('./v1/types'),
    require('./v1/tickets'),
    require('./v1/ticket-logs'),
    require('./v1/apply'),
    require('./v1/index'),
    require('./v1/customer'),
    require('./v1/special-date'),
    require('./v1/logs'),
    require('./v1/departments'),
    require('./v1/repairs'),
    require('./v1/batches'),
    require('./v1/goods'),
    require('./v1/categories')
];

module.exports = ctrls;
